//============================================================================
// MAIN : TpTallerCircuitosLogicos.cpp
//============================================================================

#include <iostream>
#include "Modelo/ElementoCircuital.h"
#include "Modelo/TestUnitarioModelo.h"
#include "./Vista/VentanaPrincipal.h"
#include "XML/xml.h"
#include "Comunicaciones/Servidor.h"
#include "SOAP/TestParserSoap.h"


using namespace std;

int main(int argc, char **argv) {

/*
 * En caso de deseat correr las pruebas unitarias descomentar el siguiente codigo y
 * comentar el restante. Como estas pruebas fueron funcionales a la primer etapa del
 * tp, y este fue sujeto a múltiples cambios, su funcionamiento puede no reflejar
 * legitimamente el estado del producto final
 */
/*
	cout<<"*--------------------------------*"<<endl;
	cout<<"* Test Unitarios Circuito Lógico *" << endl;
	cout<<"*--------------------------------*"<<endl<<endl;

	cout<<"Test de parser Soap"<<endl;
	cout<<"---------------"<<endl<<endl;
	TestParserSoap testSoap;
	testSoap.run();

	cout<<endl<<"Test del Modelo"<<endl;
	cout<<"---------------"<<endl<<endl;
	TestUnitarioModelo test;
	test.run();

	cout<<endl;
	cout<<"Test de Impresion"<<endl;
	cout<<"---------------"<<endl<<endl;

	cout<<endl;
	cout<<"Test de lectura XML"<<endl;
	cout<<"---------------"<<endl<<endl;
	TestUnitarioXML test_xml;
	test_xml.run();
*/

/*
 * EJECUCION DEL EDITOR DE CIRCUITOS LOGICOS
 */

	cerr<<"Lanzo el hilo servidor"<<endl;

	//*Validacion de parametros*//
	if (argc!=2){
			std::cerr<<"Error, cantidad de parametros incorrecta"<<std::endl;
			return 1;
	}

	//*Corrida del Server *//
	Servidor server(argv[1]);
	server.start();

	cerr<<"Starting Vista"<<endl;
	Gtk::Main kit(argc, argv);
	VentanaPrincipal window;
	Gtk::Main::run(window);
	cerr<<"Finishing Vista"<<endl;


	std::cerr<<"cerrando servidor"<<std::endl;
	server.terminar();
	server.Shutdown(2);
	server.Close();
	server.join();
	if(server.isOK())
		return 0;
	else
		return 1;

}
